Jackson এর @JsonCreator অ্যানোটেশন ব্যবহার করে JSON Deserialization (JSON থেকে Java Object এ রূপান্তর) এর সময় একটি কাস্টম কনস্ট্রাক্টর ব্যবহার করা যায়। এটি বিশেষত তখন উপযোগী যখন একটি ক্লাসে ফিল্ডগুলো ফাইনাল থাকে বা ফিল্ডগুলোকে সরাসরি Constructor এর মাধ্যমে ইনিশিয়ালাইজ করতে হয়।
@JsonCreator এর কাজ
@JsonCreatorব্যবহার করে Jackson কে জানানো হয় যে এটি কোন কনস্ট্রাক্টর বা ফ্যাক্টরি মেথড JSON থেকে Java Object তৈরি করার জন্য ব্যবহার করবে।@JsonPropertyদিয়ে ফিল্ডগুলোর নাম এবং তাদের ম্যাপিং নির্দিষ্ট করা হয়।
Example: Custom Constructor
Step 1: মডেল ক্লাস তৈরি করা
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private final String name;
private final int age;
private final String email;
// Custom Constructor
@JsonCreator
public User(
@JsonProperty("name") String name,
@JsonProperty("age") int age,
@JsonProperty("email") String email) {
this.name = name;
this.age = age;
this.email = email;
}
// Getters
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
}
Step 2: JSON Deserialization
Sample JSON:
{
"name": "Alice",
"age": 30,
"email": "alice@example.com"
}
Deserialization Code:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonCreatorExample {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"Alice\",\"age\":30,\"email\":\"alice@example.com\"}";
ObjectMapper mapper = new ObjectMapper();
// JSON থেকে User Object তৈরি
User user = mapper.readValue(json, User.class);
// Output
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println("Email: " + user.getEmail());
}
}
Output:
Name: Alice
Age: 30
Email: alice@example.com
Factory Method এর জন্য @JsonCreator
@JsonCreator ফ্যাক্টরি মেথডের সাথেও কাজ করে।
Step 1: মডেল ক্লাস
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private final String name;
private final int age;
private final String email;
private User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// Factory Method
@JsonCreator
public static User createUser(
@JsonProperty("name") String name,
@JsonProperty("age") int age,
@JsonProperty("email") String email) {
return new User(name, age, email);
}
// Getters
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
}
Step 2: JSON থেকে Object তৈরি
String json = "{\"name\":\"Bob\",\"age\":25,\"email\":\"bob@example.com\"}";
User user = mapper.readValue(json, User.class);
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println("Email: " + user.getEmail());
Field Order Independent Mapping
@JsonCreator ফিল্ডের অর্ডার-ইনডিপেনডেন্ট ম্যাপিং নিশ্চিত করে।
JSON:
{
"age": 40,
"email": "john@example.com",
"name": "John"
}
Deserialization Code:
User user = mapper.readValue(json, User.class);
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println("Email: " + user.getEmail());
Output:
Name: John
Age: 40
Email: john@example.com
নেস্টেড অবজেক্ট সহ @JsonCreator
Step 1: Address Class
public class Address {
private final String city;
private final String zip;
@JsonCreator
public Address(
@JsonProperty("city") String city,
@JsonProperty("zip") String zip) {
this.city = city;
this.zip = zip;
}
public String getCity() {
return city;
}
public String getZip() {
return zip;
}
}
Step 2: User Class
public class User {
private final String name;
private final Address address;
@JsonCreator
public User(
@JsonProperty("name") String name,
@JsonProperty("address") Address address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
}
Step 3: JSON Input
{
"name": "Alice",
"address": {
"city": "New York",
"zip": "10001"
}
}
Step 4: Deserialization
String json = "{\"name\":\"Alice\",\"address\":{\"city\":\"New York\",\"zip\":\"10001\"}}";
User user = mapper.readValue(json, User.class);
System.out.println("Name: " + user.getName());
System.out.println("City: " + user.getAddress().getCity());
System.out.println("Zip: " + user.getAddress().getZip());
Output:
Name: Alice
City: New York
Zip: 10001
@JsonCreatorJSON থেকে Object তৈরি করার জন্য কাস্টম Constructor বা Factory Method নির্দিষ্ট করতে ব্যবহার করা হয়।@JsonPropertyদিয়ে ফিল্ডের নাম এবং JSON এর সাথে তাদের ম্যাপিং নিশ্চিত করা হয়।- এটি বিশেষভাবে কার্যকর যখন ফিল্ডগুলো ফাইনাল থাকে বা ক্লাস Immutable হয়।
@JsonCreatorফিল্ড অর্ডার ইনডিপেনডেন্ট এবং নেস্টেড JSON এর সাথেও কাজ করে।
Content added By
Read more